home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-06-28 | 1.8 KB | 85 lines | [TEXT/CWIE] |
- // Sequence.cp
-
- #ifndef Sequence_h
- #include "Sequence.h"
- #endif
- #ifndef SequenceLoop_h
- #include "SequenceLoop.h"
- #endif
-
- template < class Head, class Node >
- Sequence<Head,Node>::Sequence()
- : firstLoop( 0 )
- {
- }
-
- template < class Head, class Node >
- Sequence<Head,Node>::~Sequence()
- {
- Assert( firstLoop == 0 );
- }
-
- template < class Head, class Node >
- void Sequence<Head,Node>::Register( Loop& loop ) const
- {
- Assert( &loop.head == this );
- loop.nextLoop = firstLoop;
- const_cast< Loop *& >( firstLoop ) = &loop;
- }
-
- template < class Head, class Node >
- void Sequence<Head,Node>::Unregister( Loop& loop ) const
- {
- Assert( &loop.head == this );
-
- Loop** connection = const_cast< Loop ** >( &firstLoop );
- while ( *connection != &loop )
- {
- Assert( *connection != 0 );
- connection = &(*connection)->nextLoop;
- }
-
- *connection = loop.nextLoop;
- loop.nextLoop = 0;
- }
-
- template < class Head, class Node >
- void Sequence<Head,Node>::WillRemove( Node& n )
- {
- for ( Loop *loop = firstLoop;
- loop != 0;
- loop = loop->nextLoop )
- {
- if ( loop->position == &n )
- {
- loop->position = 0;
- loop->next = n.Next();
- loop->previous = n.Previous();
- }
- else if ( loop->next == &n )
- loop->next = n.Next();
- else if ( loop->previous == &n )
- loop->previous = n.Previous();
- }
- }
-
- template < class Head, class Node >
- void Sequence<Head,Node>::WillAdd( Node& a, Before, const Node *b )
- {
- for ( Loop *loop = firstLoop;
- loop != 0;
- loop = loop->nextLoop )
- if ( loop->next == b && loop->Unfinished() )
- loop->next = &a;
- }
-
- template < class Head, class Node >
- void Sequence<Head,Node>::WillAdd( Node& a, After, const Node *b )
- {
- for ( Loop *loop = firstLoop;
- loop != 0;
- loop = loop->nextLoop )
- if ( loop->previous == b && loop->Unfinished() )
- loop->previous = &a;
- }
-